#!/bin/bash
# tarkoituksena on listata kotikansiosta tekstiä-niminen tiedosto siten että siinä olevat ipv6-osoitteet tulostetaan vihreällä muun tekstin ollessa mustaa.
# onhan tämä hidas eikä kovin selvä, muttei toivoton sekasotkukaan kuten epätarkat regex toteutukset.

# aluksi määritellään millä värillä värjätään
export GREP_COLOR="01;32" # green; 31=red; 33=yellow; 34=blue; 35=purple # 63 141'

# määritellään funktio joka kertoo onko sille syötetty varmasti ipv6-osoite:    tr -dc : | wc -c < 8
                   
function ipv6testi () { [[ $(echo $1|tr : '\n' | wc -l) = 7 || $(echo $1 | grep :: | grep -v ^:[[:xdigit:]] ) ]] && [[ $(echo $1|tr : '\n'|grep '[[:xdigit:]]*'|wc -L) < 5 ]] ;}
 
#etsitään tiedostosta ne sanat jotka saattaisivat olla ipv6 osoitteita ja talletetaan ne levylle:
cat ~/tekstiä | tr ' ' '\n' | tr -dc '\n':[[:xdigit:]] > /tmp/delme1

# tarkistetaan yksi kerrallaan listan jäsenet onko se tosiaan ipv6-osoite ja tehdään kovalevylle uusi lista hyväksytyistä:
echo '' > /tmp/delme2; while IFS=$'\n' read -r rivi; do ipv6testi $rivi && echo $rivi >> /tmp/delme2; done < /tmp/delme1

# listataan tiedosto merkiten siihen ipv6-osoitteiksi hyväksytyt:
grep --color -Ew $(cat /tmp/delme2 | tr '\n' \|) ~/tekstiä

# '/^(?>(?>([a-f0-9]{1,4})(?>:(?1)){7}|(?!(?:.*[a-f0-9](?>:|$)){8,})((?1)(?>:(?1)){0,6})?::(?2)?)|(?>(?>(?1)(?>:(?1)){5}:|(?!(?:.*[a-f0-9]:){6,})(?3)?::(?>((?1)(?>:(?1)){0,4}):)?)?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?4)){3}))$/iD'

# echo 0000:0000:0000:0000:0000:0000:0000:0000 | grep -P '(?<![:.\w])(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}(?![:.\w])'
